connection pool
この上限を超えると接続を受け付けなくなる
そこで、あらかじめ接続した状態を用意しておいて、それを貸し出すことで、使うときに接続する手間を減らす
client側で制御する
カーネルにせよ、データベース層にせよ、結局はメモリなどのハードウェアリソースをいたずらに消費しないための制限である。 メモリが溢れてディスクへのスワップが発生し、データベースサーバが停止すると、システム全体に影響する。 システム全体に影響を与えるくらいなら、クライアント側で上限を設けておいて、多少の接続待ちが起きてもよいことにする。
ここでの「client」はWeb Appサーバーのこと
2種類の実装
ドライバ型
各スレッドのローカル変数に接続オブジェクトを持たせる
プロキシ型
web app serverとDB serverの間にProxyを挟む
webapp → proxy → DB
proxy → DBは、常時接続
webapp → DBはどちらでも良い
常時接続でも、reqごとに接続でも
「接続にコストがかかる」という感覚がわからない
コネクションってなに?というのを知らないとpoolの話は理解できない
具体的にどういう処理をやっているの?
なんでpoolである必要があるの?
というかまずpoolの中に複数のconnectionがあるという理解は合っている?
その上で、なんで複数必要なのか?
1つのconnectionを確立しっぱなしにしておいて、reqごとにそれを割り当てるのでは問題が起きる?
デメリット
わかりやすい